package com.ck.ips.dao.report;

import com.ck.common.model.ProgramDownload;
import com.ck.ips.model.vo.*;
import com.ck.ips.model.vo.statics.DeviceStatusSummaryDailyVO;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @description: 报表系列
 * @author: zhanglei
 * @date: 2019/5/10 11:08
 */
public interface ReportFormsMapper {

    /**
     * 查询当前对应状态的门店个数
     * @param status 门店状态
     * @return 门店个数
     */
    Integer getStoreNumByStatus(@Param("status") Integer status);

    /**
     * 查询当前对应状态的终端个数
     * @param status 终端状态
     * @return 终端个数
     */
    Integer getDeviceNumByStatus(@Param("status") Integer status);


    /**
     * 获取今日制作节目数量
     * @param type 自营self 接口api
     * @param todayStartTime 今日0点时间戳
     * @return 数量
     */
    Integer makeProgramNum(@Param("type") String type, @Param("todayStartTime")  Long todayStartTime);

    /**
     * 今日发布节目数量
     * @param type 自营self 接口api
     * @param todayStartTime 今日0点时间戳
     * @return 数量
     */
    Integer publishProgramNum(@Param("type") String type, @Param("todayStartTime")  Long todayStartTime);

    /**
     * 获取从指定日期起未上线的终端数量
     * @param sixStartTime 指定日期时间戳
     * @return 数量
     */
    Integer getOffLineNum(@Param("sixStartTime") Long sixStartTime);

    /**
     * 今日增播失败数
     * @param todayStartTime 今日0点时间戳
     * @return 数量
     */
    Integer addFailedNum(@Param("todayStartTime") Long todayStartTime,@Param("nowTime") Long nowTime);

    /**
     * 今日减播失败数
     * @param todayStartTime 今日0点时间戳
     * @return 数量
     */
    Integer subFailedNum(@Param("todayStartTime") Long todayStartTime,@Param("nowTime") Long nowTime);

    /**
     * 规定时间未上线的终端详情
     * @param sixStartTime 起始时间戳
     * @return 终端详情
     */
    Page<SevenNotLoginDeviceVO> sevenNotLoginDeviceInfo(@Param("sixStartTime") Long sixStartTime);

    /**
     * 获取对应时间段内发布节目信息
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 节目版本号集合
     */
    List<String> getProgramVersionByTime(@Param("startTime") Long startTime,@Param("endTime") Long endTime);

    /**
     * 根据节目版本号获取素材数量
     * @param programVersionList 节目版本号集合
     * @return 数量
     */
    Integer getFileNumByProgramList(@Param("programVersionList") List<String> programVersionList);

    /**
     * 根据日期获取当日的素材减播数据
     * @param time 日期
     * @return 素材信息
     */
    List<FilePlayNumVO> getFilePlayNum(@Param("time") String time);

    /**
     * 获取下发成功的单个终端节目信息
     * @param startTime 开始时间戳
     * @param endTime 结束时间戳
     * @return 下发详情
     */
    List<ProgramDownload> getInfoByTime(@Param("startTime") Long startTime,@Param("endTime") Long endTime);

    /**
     * 根据节目版本号获取节目包含的素材数量
     * @param programVersion 节目版本号
     * @return 终端节目信息
     */
    Integer getFileNumByProgram(@Param("programVersion") String programVersion);

    /**
     * 今日新增终端个数
     * @param todayStartTime 今日0点时间
     * @return 数量
     */
    Integer todayNewDeviceNum(@Param("todayStartTime") Long todayStartTime);

    /**
     * 根据终端分组查询终端信息
     * @param deviceGroupId 终端分组id
     * @return 终端状态信息
     */
    Page<DeviceStatusVO> getDeviceByGroupId(@Param("deviceGroupId") Long deviceGroupId);

    /**
     * 根据终端编码获取某天的监播数据
     * @param deviceCode 终端唯一编码
     * @param dayTime 时间 如：20190514
     * @return 监播信息
     */
    Page<PlayLogVO> reportLogDay(@Param("deviceCode") String deviceCode,@Param("dayTime") String dayTime);

    /**
     * 根据终端编码获取某月的监播数据
     * @param deviceCode 终端唯一编码
     * @param monthTime 时间 如：201905
     * @return 监播信息
     */
    Page<PlayLogVO> reportLogMonth(@Param("deviceCode") String deviceCode,@Param("monthTime") String monthTime);

    /**
     * 根据终端编码获取一段时间内的监播数据
     * @param deviceCode 终端唯一编码
     * @param dayStartTime 开始时间 如：20190510
     * @param dayEndTime 结束时间 如：20190514
     * @return 监播信息
     */
    Page<PlayLogVO> reportLogTimeFrame(@Param("deviceCode") String deviceCode,@Param("dayStartTime") String dayStartTime,@Param("dayEndTime") String dayEndTime);

    /**
     * 获取某日某终端在线详情
     * @param dayTime 日期 2019-03-14
     * @param deviceCode 终端唯一编码
     * @return 详情
     */
    Page<DeviceOnLineVO> getOnLineInfo(@Param("dayTime") String dayTime,@Param("deviceCode") String deviceCode);

    /**
     * 查询终端某天在线离线设备数量
     * @param time 时间 如：2019-05-12
     * @return 详情
     */
    DeviceStatusSummaryDailyVO sevenDeviceLineInfo(@Param("time") String time);

    /**
     * 根据节目版本号和时间，获取节目某天的监播记录
     * @param time 时间 20190305
     * @param programVersion 节目版本号
     * @return 监播信息
     */
    ProgramPlayNumVO getProgramPlayNum(@Param("time") String time,@Param("programVersion") String programVersion);

    /**
     * 获取终端的某个节目的所有素材分别播放的次数和时长
     * @param deviceCode 终端唯一编码
     * @param programVersionList 节目版本号列表
     * @return 详情
     */
    List<FileRealTimeDataVO> getFileRealTimeData(@Param("deviceCode") String deviceCode,@Param("programVersionList") List<String> programVersionList);

    /**
     * 根据终端编码获取一段时间内的监播数据-所有
     * @param deviceCode 终端唯一编码
     * @param dayStartTime 开始时间 如：20190510
     * @param dayEndTime 结束时间 如：20190514
     * @return 监播信息
     */
    List<PlayLogVO> reportLogTimeFrameExcel(@Param("deviceCode") String deviceCode,@Param("dayStartTime") String dayStartTime,@Param("dayEndTime") String dayEndTime);

    /**
     * 增播减播下发失败统一查询
     * @param todayStartTime 今日起始时间
     * @param nowTime 当前时间
     * @return 增播减播详情
     */
    Page<ProgramAddSubFailedVO> addSubFailedInfo(@Param("todayStartTime") Long todayStartTime,@Param("nowTime") Long nowTime);

    /**
     * 获取时间戳之后解绑的终端设备数量
     * @param todayStartTime 起始时间戳
     * @return 解绑的终端数量
     */
    Integer todayUntieDeviceNum(@Param("todayStartTime") Long todayStartTime);

    /**
     * 获取所有设备当前播放广告数量
     * @return 所有设备当前播放广告数量
     */
    List<DeviceProgramInfoVO> deviceProgramInfo(@Param("time") Long time);

    /**
     * 广告数量分类查看设备详情
     * @param type 产看类型
     * @return 设备列表
     */
    List<DeviceProgramInfoVO> deviceProgramDetail(@Param("type") Integer type,@Param("time") Long time);
}
